import { createRouter, createWebHashHistory } from "vue-router";
import { constantRoute } from "./routes";
import { start, close } from "@/utils/nporgress";
import { useUserStore } from "@/store/user";

const router = createRouter({
  // 历史模式
  history: createWebHashHistory(),
  routes: constantRoute,
  // 滚动行为
  scrollBehavior() {
    return { left: 0, top: 0 };
  },
});

// 查看跳转的路由是否需要权限认证
router.beforeEach(async (to, _from, next) => {
  start();
  const userSotre = useUserStore();
  const token = userSotre.token;
  const nickname = userSotre.user.nickname;
  if (token) {
    // 如果登录了就不能重新登录了 重新指向首页
    if (to.path === "/login") {
      next({ path: "/" });
    } else {
      // 判断是否有有用户信息
      if (nickname) {
        // 如果有用户信息直接放行
        next();
      } else {
        // 如果没有用户信息根据 token 获取用户信息 如果获取失败清除 token 信息并回到登录页
        try {
          await userSotre.setUser();
          next({ ...to, replace: true });
        } catch (error) {
          await userSotre.deleteUser();
          next({ path: "/login", query: { redirect: to.fullPath } });
        }
      }
    }
  } else {
    // 如果没有登录
    if (to.path === "/login") {
      // 访问的是登录页直接放行
      next();
    } else {
      // 访问的不是登录页 重新指向登录页
      next({ path: "/login", query: { redirect: to.path } });
    }
  }
});

router.afterEach((_to, _from) => {
  close();
});

export default router;
